package edu.mju.eduservice.service.impl;

import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import edu.mju.eduservice.entity.CourseType;
import edu.mju.eduservice.listener.CourseTypeListener;
import edu.mju.eduservice.mapper.CourseTypeMapper;
import edu.mju.eduservice.service.CourseTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import edu.mju.eduservice.vo.coursetype.CourseTypeData;
import edu.mju.eduservice.vo.coursetype.OneCourseType;
import edu.mju.eduservice.vo.coursetype.TwoCourseType;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author xiaoxin
 * @since 2020-08-30
 */
@Service
public class CourseTypeServiceImpl extends ServiceImpl<CourseTypeMapper, CourseType> implements CourseTypeService {

    /**
     *  添加课程分类
     * @param file 上传的excel文件
     */
    @Override
    public void saveCourseType(MultipartFile file,CourseTypeService courseTypeService) {
        try {
            //获取文件输入流
            InputStream inputStream = file.getInputStream();
            EasyExcel.read(inputStream, CourseTypeData.class,new CourseTypeListener(courseTypeService)).sheet().doRead();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     *  返回所有课程分类
     * @return 一级分类集合
     */
    @Override
    public List<OneCourseType> getAllCourseType() {
        //返回的list集合
        List<OneCourseType> reList = new ArrayList<>();

        //查询所有一级分类：封装到courseTypes1()
        QueryWrapper<CourseType> wrapper = new QueryWrapper<>();
        wrapper.eq("parent_id","0");
        List<CourseType> courseTypes1 = baseMapper.selectList(wrapper);
        //this.list(wrapper)

        //查询所有二级分类：封装到courseTypes2()
        QueryWrapper<CourseType> wrapper2 = new QueryWrapper<>();
        wrapper.ne("parent_id","0");
        List<CourseType> courseTypes2 = baseMapper.selectList(wrapper2);

        //封装一级分类
        for (int i = 0; i < courseTypes1.size(); i++) {
            CourseType courseType = courseTypes1.get(i);
            OneCourseType oneCourseType = new OneCourseType();

            BeanUtils.copyProperties(courseType,oneCourseType);
            //等于以下语句：   oneCourseType.setId(courseType.getId());
            //oneCourseType.setTypeName(courseType.getTypeName());



            //封装二级分类
            List<TwoCourseType> twoCourseList = new ArrayList<>();
            for (int j = 0; j < courseTypes2.size(); j++) {
                CourseType courseType2 = courseTypes2.get(j);
                //判断二级分类是否属于一级分类
                if(courseType2.getParentId().equals(courseType.getId())){
                    TwoCourseType twoCourseType = new TwoCourseType();
                    BeanUtils.copyProperties(courseType2,twoCourseType);
                    twoCourseList.add(twoCourseType);
                }
            }
            //一级下的所有二级分类放到一级分类中
            oneCourseType.setChildren(twoCourseList);

            reList.add(oneCourseType);
        }

        
        return reList;
    }
}
